
/*
 * @Descripttion: 单页框架扩展
 * @version: 
 * @Author: ada.wu
 * @Date: 2025-07-02 02:24:59
 * @LastEditors: ada.wu
 * @LastEditTime: 2025-07-02 17:15:26
 */
layui.define(["element", "jquery"], function (exports) {
    var element = layui.element,
        $ = layui.$,
        layer = layui.layer;


    var miniPage = {

        /**
         * 初始化tab
         * @param options
         */
        render: function (options) {
            options.homeInfo = options.homeInfo || {};
            options.menuList = options.menuList || [];
            options.multiModule = options.multiModule || false;
            options.renderPageVersion = options.renderPageVersion || false;
            options.listenSwichCallback = options.listenSwichCallback || function () {
            };
            var href = location.hash.replace(/^#\//, '');
            if (href === null || href === undefined || href === '') {
                miniPage.renderHome(options);
            } else {
                // console.log('renderPage=======11111')
                miniPage.renderPage(href, options);
                if (options.multiModule) {
                    miniPage.listenSwitchMultiModule(href);
                } else {
                    miniPage.listenSwitchSingleModule(href);
                }
            }
            miniPage.listen(options);
            miniPage.listenHash(options);
        },

        /**
         * 初始化主页
         * @param options
         */
        renderHome: function (options) {
            // console.log('初始化主页===', options)
            options.homeInfo = options.homeInfo || {};
            options.homeInfo.href = options.homeInfo.href || '';
            options.renderPageVersion = options.renderPageVersion || false;
            $('.layuimini-page-header').addClass('layui-hide');
            miniPage.renderPageContent(options.homeInfo.href, options);
        },

        /**
         * 初始化页面
         * @param href
         * @param options
         */
        renderPage: function (href, options) {
            // console.log('href, options=====', href, options)
            miniPage.renderPageTitle(href, options);
            miniPage.renderPageContent(href, options);
        },

        /**
         * 初始化页面标题
         * @param href
         * @param options
         */
        renderPageTitle: function (href, options) {
            // console.log('初始化页面标题======',href, options)
            // options.homeInfo = options.homeInfo || {};
            // options.homeInfo.title = options.homeInfo.title || '主页';
            // options.menuList = options.menuList || [];
            // $('.layuimini-page-header').removeClass('layui-hide');
            // var pageTitleHtml = '<a lay-href="" href="javascript:;" class="layuimini-back-home">' + options.homeInfo.title + '</a><span lay-separator="">/</span>\n';
            // var pageTitleArray = miniPage.buildPageTitleArray(href, options.menuList);
            // if (pageTitleArray.length > 0) {
            //     for (var key in pageTitleArray) {
            //         key = parseInt(key);
            //         if (key !== pageTitleArray.length - 1) {
            //             pageTitleHtml += '<a><cite>' + pageTitleArray[key] + '</cite></a><span lay-separator="">/</span>\n';
            //         } else {
            //             pageTitleHtml += '<a><cite>' + pageTitleArray[key] + '</cite></a>\n';
            //         }
            //     }
            // } else {
            //     var title = sessionStorage.getItem('layuimini_page_title');
            //     if (title === null || title === undefined || title === '') {
            //         $('.layuimini-page-header').addClass('layui-hide');
            //     } else {
            //         pageTitleHtml += '<a><cite>' + title + '</cite></a>\n';
            //     }
            // }
            // $('.layuimini-page-header .layuimini-page-title').empty().html(pageTitleHtml);
        },


        /**
         * 取消子页面
         * @param {*} containerHtml 
         * @param {*} hideContainerClass 
         */
        backPageCreate(containerHtml, hideContainerClass) {
            var container = containerHtml ? containerHtml : '.page-create';
            var hideContainer = hideContainerClass ? hideContainerClass : '.layuimini-main.page-main-create.layui-hide';
            $(container).html('');
            $(hideContainer).removeClass('layui-hide');
        },
        /**
        * 创建子页面
        * @param options
        * @param href
        */
        renderPageCreate: function (href, containerHtml, addContainerClass) {
            var container = containerHtml ? containerHtml : '.page-create';
            var addContainer = addContainerClass ? addContainerClass : '.layuimini-main.page-main-create';
            $(container).html('');
            //要隐藏当前页面
            $(addContainer).addClass('layui-hide');
            $.ajax({
                url: href,
                type: 'get',
                dataType: 'html',
                success: function (data) {
                    $(container).html(data);
                    element.init();
                },
                error: function (xhr, textstatus, thrown) {
                    return layer.msg('Status:' + xhr.status + '，' + xhr.statusText + '，请稍后再试！');
                }
            });

        },


        /**
         * 初始化页面内容
         * @param options
         * @param href
         */
        renderPageContent: function (href, options) {
            // console.error('初始化页面内容===', href, options)
            if (options) {
                //首页不显示左侧菜单
                if (href === options.homeInfo.href) {
                    $(".layuimini-menu-left").addClass('layui-hide');
                    $(".layui-body").addClass('layui-body-left0');
                    miniPage.listenSwitchMultiModule(href);
                } else {
                    $(".layuimini-menu-left").removeClass('layui-hide');
                    $(".layui-body").removeClass('layui-body-left0');
                }

                options.renderPageVersion = options.renderPageVersion || false;
                if (options.renderPageVersion) {
                    var v = new Date().getTime();
                    href = href.indexOf("?") > -1 ? href + '&v=' + v : href + '?v=' + v;
                }
            }

            //单页面赋值
            var container = '.layuimini-content-page';
            // if ($(".layuimini-page-header").hasClass("layui-hide")) {
            // $(container).removeAttr("style");
            // } else {
            // $(container).attr("style", "height: calc(100% - 36px)");
            // $(container).attr("style", "height: calc(100%)");
            // }
            $(container).html('');

            $.ajax({
                url: href,
                type: 'get',
                dataType: 'html',
                success: function (data) {
                    $(container).html(data);
                    element.init();
                },
                error: function (xhr, textstatus, thrown) {
                    return layer.msg('Status:' + xhr.status + '，' + xhr.statusText + '，请稍后再试！');
                }
            });
        },

        /**
         * 刷新页面内容
         * @param options
         */
        refresh: function (options) {
            var href = location.hash.replace(/^#\//, '');
            if (href === null || href === undefined || href === '') {
                miniPage.renderHome(options);
            } else {
                miniPage.renderPageContent(href, options);
            }
        },

        /**
         * 构建页面标题数组
         * @param href
         * @param menuList
         */
        // buildPageTitleArray: function (href, menuList) {
        //     var array = [],
        //         newArray = [];
        //     for (key in menuList) {
        //         var item = menuList[key];
        //         if (item.href === href) {
        //             array.push(item.title);
        //             break;
        //         }
        //         if (item.child) {
        //             newArray = miniPage.buildPageTitleArray(href, item.child);
        //             if (newArray.length > 0) {
        //                 newArray.unshift(item.title);
        //                 array = array.concat(newArray);
        //                 break;
        //             }
        //         }
        //     }
        //     return array;
        // },

        /**
         * 获取指定链接内容 单页面
         * @param href
         * @param params {Object} 自定义参数，例如 {id: 123, type: 'event'}
         * @returns {string}
        */
        getHrefContent: function (href) {
            var content = '';
            var v = new Date().getTime();
            $.ajax({
                url: href.indexOf("?") > -1 ? href + '&v=' + v : href + '?v=' + v,
                type: 'get',
                dataType: 'html',
                async: false,
                success: function (data) {
                    content = data;
                },
                error: function (xhr, textstatus, thrown) {
                    return layer.msg('Status:' + xhr.status + '，' + xhr.statusText + '，请稍后再试！');
                }
            });
            return content;
        },

        /**
         * 获取弹出层的宽高
         * @returns {jQuery[]}
         */
        getOpenWidthHeight: function () {
            var clienWidth = $(".layuimini-content-page").width();
            var clientHeight = $(".layuimini-content-page").height();
            var offsetLeft = $(".layuimini-content-page").offset().left / 2;
            var offsetTop = $(".layuimini-content-page").offset().top;
            return [clienWidth, clientHeight, offsetTop, offsetLeft];
        },

        /**
         * 单模块切换
         * @param href
         */
        listenSwitchSingleModule: function (href) {
            // console.log('单模块切换====', href)
            $("[layuimini-href]").each(function () {
                if ($(this).attr("layuimini-href") === href) {
                    // 自动展开菜单栏
                    var addMenuClass = function ($element, type) {
                        if (type === 1) {
                            $element.addClass('layui-this');
                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-this')) {
                                $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
                            } else {
                                addMenuClass($element.parent().parent(), 2);
                            }
                        } else {
                            $element.addClass('layui-nav-itemed');
                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-nav-itemed')) {
                                $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
                            } else {
                                addMenuClass($element.parent().parent(), 2);
                            }
                        }
                    };
                    addMenuClass($(this).parent(), 1);
                    return false;
                }
            });
        },

        /**
         * 多模块切换
         * @param href
         */
        listenSwitchMultiModule: function (href) {
            // console.log('多模块切换==',href)
            $("[layuimini-href]").each(function () {
                if ($(this).attr("layuimini-href") === href) {
                    // 自动展开菜单栏
                    var addMenuClass = function ($element, type) {
                        if (type === 1) {
                            $element.addClass('layui-this');
                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-this')) {
                                var moduleId = $element.parent().attr('id');
                                if (moduleId) {
                                    $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
                                    $("#" + moduleId + "HeaderId").addClass("layui-this");
                                    $(".layuimini-menu-left .layui-nav.layui-nav-tree").attr('class', 'layui-nav layui-nav-tree layui-hide');
                                    $("#" + moduleId).attr('class', 'layui-nav layui-nav-tree layui-this');
                                }
                            } else {
                                addMenuClass($element.parent().parent(), 2);
                            }
                        } else {
                            $element.addClass('layui-nav-itemed');
                            if ($element.hasClass('layui-nav-item') && $element.hasClass('layui-nav-itemed')) {
                                var moduleId = $element.parent().attr('id');
                                $(".layuimini-header-menu li").attr('class', 'layui-nav-item');
                                $("#" + moduleId + "HeaderId").addClass("layui-this");
                                $(".layuimini-menu-left .layui-nav.layui-nav-tree").attr('class', 'layui-nav layui-nav-tree layui-hide');
                                $("#" + moduleId).attr('class', 'layui-nav layui-nav-tree layui-this');
                            } else {
                                addMenuClass($element.parent().parent(), 2);
                            }
                        }
                    };
                    addMenuClass($(this).parent(), 1);
                    return false;
                }
            });
        },

        /**
         * 修改hash地址定位
         * @param href
         */
        hashChange: function (href) {
            window.location.hash = "/" + href;
        },

        /**
         * 修改hash地址为主页
         */
        hashHome: function () {
            window.location.hash = "/";
        },

        /**
         * 监听
         * @param options
         */
        listen: function (options) {
            /**折叠展开 */
            $('#toggleFormBtn').on('click', function () {
                var $formContainer = $('.search-box-body');
                var $icon = $('#toggleIcon');
                var $text = $(this).find('span');

                if ($formContainer.hasClass('more')) {
                    // 当前是展开状态，要折叠
                    $formContainer.removeClass('more');
                    $icon.removeClass('layui-icon-up').addClass('layui-icon-down');
                    $text.text('展开');
                } else {
                    // 当前是折叠状态，要展开
                    $formContainer.addClass('more');
                    $icon.removeClass('layui-icon-down').addClass('layui-icon-up');
                    $text.text('收起');
                }
            });

            /**
             * 打开新窗口
             */
            $('body').on('click', '[layuimini-href]', function () {
                // console.log('打开新窗口====222222')
                var loading = layer.load(0, { shade: false, time: 2 * 1000 });
                var href = $(this).attr('layuimini-href'),
                    target = $(this).attr('target');
                if (!href) return;
                var me = this;
                var el = $("[layuimini-href='" + href + "']", ".layuimini-menu-left");
                layer.close(window.openTips);
                if (el.length) {
                    $(el).closest(".layui-nav-tree").find(".layui-this").removeClass("layui-this");
                    $(el).parent().addClass("layui-this");
                }
                if (target === '_blank') {
                    layer.close(loading);
                    window.open(href, "_blank");
                    return false;
                }
                miniPage.hashChange(href);
                $('.layuimini-menu-left').attr('layuimini-page-add', 'yes');
                layer.close(loading);
            });

            /**
             * 在子页面上打开新窗口
             */
            $('body').on('click', '[layuimini-content-href]', function () {
                var loading = parent.layer.load(0, { shade: false, time: 2 * 1000 });
                var href = $(this).attr('layuimini-content-href'),
                    title = $(this).attr('data-title'),
                    target = $(this).attr('target');
                if (!href) return;
                var me = this;
                var el = $("[layuimini-href='" + href + "']", ".layuimini-menu-left");
                layer.close(window.openTips);
                if (el.length) {
                    $(el).closest(".layui-nav-tree").find(".layui-this").removeClass("layui-this");
                    $(el).parent().addClass("layui-this");
                }
                if (target === '_blank') {
                    parent.layer.close(loading);
                    window.open(href, "_blank");
                    return false;
                }
                sessionStorage.setItem('layuimini_page_title', title);
                miniPage.hashChange(href);
                parent.layer.close(loading);
            });

            /**
             * 返回主页
             */
            $('body').on('click', '.layuimini-back-home', function () {
                miniPage.hashHome();
            });
        },
        /**
         * 监听hash变化
         * @returns {boolean}
         */
        listenHash: function (options) {
            // console.log('监听hash变化==')
            options.homeInfo = options.homeInfo || {};
            options.multiModule = options.multiModule || false;
            options.listenSwichCallback = options.listenSwichCallback || function () {
            };
            window.onhashchange = function () {
                var href = location.hash.replace(/^#\//, '');
                if (typeof options.listenSwichCallback === 'function') {
                    options.listenSwichCallback();
                }
                if (href === null || href === undefined || href === '') {
                    $("[layuimini-href]").parent().removeClass('layui-this');
                    miniPage.renderHome(options);
                } else {
                    // console.log('renderPage=======222222222')
                    miniPage.renderPage(href, options);
                }
                if ($('.layuimini-menu-left').attr('layuimini-page-add') === 'yes') {
                    $('.layuimini-menu-left').attr('layuimini-page-add', 'no');
                } else {
                    // 从页面中打开的话，浏览器前进后退、需要重新定位菜单焦点
                    $("[layuimini-href]").parent().removeClass('layui-this');
                    if (options.multiModule) {
                        miniPage.listenSwitchMultiModule(href);
                    } else {
                        miniPage.listenSwitchSingleModule(href);
                    }
                }
            };
        },


    };

    exports("miniPage", miniPage);
});
